/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package byblos.apresentacao.reserva;

import byblos.apresentacao.idioma.InterceptadorIdioma;
import byblos.apresentacao.usuario.InterceptadorLogin;
import byblos.negocio.reserva.Reserva;
import byblos.persistencia.DAO;
import byblos.util.DataUtil;
import java.util.Calendar;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import org.vraptor.annotations.Component;
import org.vraptor.annotations.InterceptedBy;
import org.vraptor.annotations.Out;
import org.vraptor.annotations.Parameter;

/**
 *
 * @author helena
 */
@Component
@InterceptedBy(value = {InterceptadorIdioma.class, InterceptadorLogin.class})
public class ReservaListarComponent {

    @Out
    private List<Reserva> reservas;
    @Out
    @Parameter
    private Boolean filtroArquivo;
    @Out
    @Parameter
    private String filtroDataInicio;
    @Out
    @Parameter
    private String filtroDataTermino;

    public void listar() {
        if (filtroArquivo == null) {
            filtroArquivo = false;
        }
        Calendar dataInicio, dataTermino;
        if (filtroDataInicio == null || filtroDataTermino == null) {
            dataInicio = DataUtil.getCalendar(DataUtil.agora().minusDays(15));
            filtroDataInicio = DataUtil.toString(dataInicio);
            dataTermino = DataUtil.getCalendar(DataUtil.agora().plusDays(15));
            filtroDataTermino = DataUtil.toString(dataTermino);
        } else {
            dataInicio = DataUtil.getCalendar(filtroDataInicio);
            dataTermino = DataUtil.getCalendar(filtroDataTermino);
        }
        if (filtroArquivo) {
            reservas = new DAO().listar(Reserva.class, "ReservaPorPeriodo", dataInicio, dataTermino);
        } else {
            reservas = new DAO().listar(Reserva.class, "ReservaPorPeriodoPorArquivo", dataInicio, dataTermino, false);
        }
        Collections.sort(reservas, new ComparadorReserva());
    }

    private class ComparadorReserva implements Comparator<Reserva> {

        public int compare(Reserva r1, Reserva r2) {
            int comparacaoData = r2.getDataReserva().compareTo(r1.getDataReserva());
            if (comparacaoData != 0) {
                return comparacaoData;
            }
            return ((Integer) r2.getId()).compareTo((Integer) r1.getId());
        }
    }
}